home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / comms_w / ftpsrv11.zip / SERV-U.TXT < prev   
Text File  |  1995-03-21  |  74KB  |  1,596 lines

  1.                               
  2.                               
  3.                               
  4.                          FTP Serv-U
  5.                               
  6.                               
  7.                 FTP-Server Daemon for WinSock
  8.                               
  9.                               
  10.                          Version 1.1
  11.                               
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.                     (c) 1995 Rob Beckers
  31.                               
  32.                           Cat Soft
  33.  
  34.  
  35.                               
  36.  
  37.                          DISCLAIMER
  38.              ==========
  39.                               
  40. I  know, it's not the nicest way to start off. So let's just
  41. get this part over with, OK?!
  42.  
  43. The  FTP  server  program Serv-U and its  documentation  are
  44. copyright  Rob  Beckers.  It  is distributed  as  shareware,
  45. giving  you the right to try it for a period of 30 days.  If
  46. you  intend to use Serv-U after the initial try-out  period,
  47. you are obliged to pay the registration fee.
  48. The  next paragraph is a beautiful piece of prose.  In  just
  49. two  sentences  it  says it all. Alas, unfortunately  it  is
  50. necessary, so please bear with me.
  51.  
  52. This  software  is provided by the regents and  contributors
  53. 'as  is'  and any express or implied warranties,  including,
  54. but   not   limited   to,   the   implied   warranties    of
  55. merchantability  and  fitness for a particular  purpose  are
  56. disclaimed.   In no event shall the regents or  contributors
  57. be  liable  for  any direct, indirect, incidental,  special,
  58. exemplary,  or  consequential damages  (including,  but  not
  59. limited  to,  procurement of substitute goods  or  services;
  60. loss  of  use,  data, or profits; or business  interruption)
  61. however  caused and on any theory of liability,  whether  in
  62. contract, strict liability, or tort (including negligence or
  63. otherwise)  arising  in  any way out  of  the  use  of  this
  64. software, even if advised of the possibility of such damage.
  65. Contents
  66.  
  67.  
  68. CONTENTS
  69. ========
  70.  
  71. Introduction                                               1
  72.  
  73. 1. Making It Work - Installation                           3
  74.   1.1 Installation                                         3
  75.   1.2 De-installation                                      4
  76.   1.3 Upgrading                                            4
  77.   1.4 Known Bugs & Problems                                4
  78.   1.5 Changes Since Version 1.00                           5
  79.   1.6 A Word to the Wise (but paranoid)                    6
  80.  
  81. 2. The Grand Tour - Menus                                  7
  82.   2.1 The File Menu                                        7
  83.   2.2 The Edit Menu                                        7
  84.   2.3 The Setup Menu                                       7
  85.   2.4 The Help Menu                                       14
  86.   2.5 The Logfile and Screen                              14
  87.  
  88. 3. The Inner Workings                                     15
  89.   3.1 Serv-U Internals                                    15
  90.   3.2 The SERV-U.INI File                                 15
  91.  
  92. 4. Getting In Touch - Bugs & Registration                 21
  93.   4.1 Reporting Bugs                                      21
  94.   4.2 Registering Serv-U                                  21
  95.  
  96. Registration Form Serv-U                                  24
  97.  
  98.  
  99. INTRODUCTION
  100. ============
  101.  
  102. Thank you for giving this program a try!
  103.  
  104. With  FTP  Serv-U your PC will be turned into a FTP  server.
  105. This means that others on the computer network that you  are
  106. connected  to  can access your PC to copy, move,  make,  and
  107. delete files and directories, using the FTP protocol (FTP  =
  108. File  Transfer  Protocol). This protocol  dictates  standard
  109. ways  of  communicating  between  computers,  so  that  many
  110. different  types  of  computers, using  different  operating
  111. systems and file formats, can exchange information.
  112. FTP  Serv-U  is a 'server' program and/or daemon.  The  term
  113. daemon  comes from the ancient Greek mythology.  There,  the
  114. Daemons  were  half-gods, acting as messengers  between  the
  115. people  on  earth  and  the  gods.  This  FTP  server  acts,
  116. likewise,  as  a  messenger for file  transfer  between  FTP
  117. clients  and  your computer. Once started  it  sits  in  the
  118. background  waiting  for a client to contact  it  and  after
  119. communications  are  established, acting  out  the  client's
  120. commands.
  121. There  are  FTP  servers (and clients)  for  many  different
  122. systems.  This particular program is meant for PC's  running
  123. MS-Windows that have a WinSock version 1.1 compatible TCP/IP
  124. stack installed.
  125.  
  126. Why  use  this  program and not one of the  many  other  FTP
  127. servers that are available? For this I have to take you back
  128. in time a little, to about a year ago. I needed a FTP server
  129. to  make  some  files available to others and  tried  out  a
  130. number  of server programs. One simply didn't work.  Another
  131. would  work,  but as soon as someone started transferring  a
  132. file from my PC it would lock up the whole machine until the
  133. transfer  was complete. And then there was one  that  worked
  134. fine,  but lacked all but the most basic security. So, after
  135. endless  frustration I decided to write my own, figuring  it
  136. couldn't  be  that hard. As usual things got a  bit  out  of
  137. hand,  but  a year and over 11000 lines of C++ later  you're
  138. looking at the result!
  139. So what has this FTP server to offer?
  140.  
  141.      * Access for multiple clients at the same time.  Access
  142.        for  'Anonymous' users. With the possibility to limit
  143.        the  number of clients at any given time, so  your PC
  144.        remains workable.
  145.      * Lots of security! On a directory and even file basis.
  146.        Allowing  different settings for  each  user,  and by
  147.        putting   users   into   'groups'   permitting   easy
  148.        maintenance  for large numbers of users. There's even
  149.        an  option  to allow or prohibit clients on the basis
  150.        of  their IP-number. Ideal if you want to let certain
  151.        people  roam around your computer, but you don't want
  152.        the  whole  world knocking at your door  (that is  to
  153.        say: they can knock, but they won't get in).
  154.      * It  allows  transfer  to or from  ports,  like  PRN:,
  155.        LPT1:, COM1:, and AUX:. This allows you to setup your
  156.        PC  as a print server by simply transferring the file
  157.        to  be  printed to the desired port! Since  the ports
  158.        are part of the regular security system, a user needs
  159.        permission  to transfer to/from a port, allowing  you
  160.        to control who can use it.
  161.      * A  quite  complete  implementation, and  very  strict
  162.        adherence  to the FTP standard (found in document RFC
  163.        959).  Supports the 'passive' command  PASV.  This is
  164.        needed  by  WWW-browsers and proxy  agents (something
  165.        required   when  there  is  a  'firewall')  for   FTP
  166.        transfer.  Another  feature  is  that  you  can   let
  167.        'Anonymous' users always see the root directory ('\')
  168.        as  their  login directory. This, again, is needed by
  169.        some WWW-browsers to make FTP transfers work.
  170.      * Easy to setup and maintain. Everything is  accessible
  171.        through  menus,  and  for  automated  maintenance the
  172.        settings are stored in an .INI file of simple format.
  173.      * There is lots of logging! You can select how much  to
  174.        log and where (to screen and/or file). The logfile is
  175.        of a standard format to make machine reading easy, in
  176.        case you need to do that for accounting purposes.
  177.      * It  is fast! The file transfer speed you'll  get will
  178.        be  very  close  to the maximum your TCP/IP  stack is
  179.        capable  of   (well, assuming your FTP  client  is at
  180.        least as fast of course).
  181.      * Life  time free updates when registered  (as long  as
  182.        Serv-U exists).
  183.      * A very cute icon!
  184.      * Compared to the commercial implementations, Serv-U is
  185.        dirt cheap!
  186.  
  187. If  you didn't register this program, then you're looking at
  188. the  try-out version of Serv-U. When started for  the  first
  189. time,  it'll  let  you  choose between  a  fully  functional
  190. program  or a somewhat crippled one. The text during startup
  191. will  explain it clearly. If you choose the fully functional
  192. version  then  there  is absolutely no difference  with  the
  193. registered  version. But (yes, there had  to  be  a  'but'),
  194. after  a  little over 30 days it will stop working. Counting
  195. starts  the  first  time you run the  program.  I  warn  you
  196. beforehand: re-installing it will not help you!
  197.  
  198. Before  I  forget  it: Thanks, Lars, Kyle,  Arend,  Michael,
  199. Ryan,  Yiannis, Jozsef, Rick, and Brad for beta testing  and
  200. turning  my  attempt at English into the  real  thing.  And,
  201. Alun,  I  hope I didn't shock you too much by bringing  this
  202. program out. You can't say I didn't warn you though ...
  203.  
  204. OK,  enough  sales  talk.  Let's continue  with  the  actual
  205. documentation. First thing will be how to install Serv-U  to
  206. get you in business.
  207.  
  208.  
  209. 1. MAKING IT WORK - INSTALLATION
  210. ================================
  211.  
  212. You're  eager  to get things going, but a little  afraid  of
  213. what  lies  ahead. Never fear, it couldn't  be  simpler.  So
  214. let's get started!
  215.  
  216. 1.1 Installation
  217.  
  218. Nothing is simpler than installing Serv-U: just unzip it  in
  219. the directory of your choice and run it. There is no need to
  220. change your 'PATH' or put anything in other directories.
  221.  
  222. Serv-U comes with the following files:
  223.      SERV-U.EXE          - The FTP-server executable itself
  224.      SERV-U.DOC          - The documentation  in  MS-Word
  225.                            format
  226.      SERV-U.TXT          - The documentation in ASCII format
  227.      README.TXT          - Something you have to read
  228.      BWCC.DLL            - The Borland Custom Control  
  229.                            library that creates the 3D-look
  230.      REGISTER.TXT        - A registration form in ASCII format
  231.      FILE_ID.DIZ         - Short description file for use by
  232.                            bulletin boards
  233.  
  234. When  Serv-U  is started for the first time, it creates  the
  235. file:
  236.       SERV-U.INI         - File containing all settings and
  237.                            user information
  238.  
  239. The  only fine point you might want to pay attention  to  is
  240. whether  or not you already have the file BWCC.DLL  in  your
  241. Windows directory.If so, you can delete the one in the Serv-
  242. U  directory, but make sure it is the same version  (compare
  243. the sizes)!
  244.  
  245. Serv-U  offers two very distinct ways to try  it  out.  Both
  246. with  their  own advantages and disadvantages. When  started
  247. for the first time (or in absence of a SERV-U.INI file),  it
  248. will  show  you a screen explaining the two try-out  options
  249. and allowing you to choose one of them. The first choice  is
  250. a fully functional try-out version exactly equal to the real
  251. thing,  but it will stop working after 30 and some days.  It
  252. does  this  by  contacting  a  permission  server  over  the
  253. Internet every time Serv-U is started. The permission server
  254. (my  PC in fact) keeps track of when the program was started
  255. for the first time and uses that information to determine if
  256. it should be allowed to run this time, or not. It then sends
  257. this answer back to Serv-U and the program will consequently
  258. work  or  stop. To this effect, a network packet is sent  to
  259. the  permission  server containing a version  code,  the  IP
  260. number  of  your PC, and a run/norun flag. It receives  back
  261. the  same packet with the flag set to run or stop.  This  is
  262. all  that is communicated between the systems, nothing more,
  263. nothing less!
  264. The  second  choice is a try-out version  that  is  somewhat
  265. crippled. It will only allow a total of 10 file transfers (5
  266. PUTs  and 5 GETs), it will show a message saying it  is  not
  267. registered to anyone who logs into the server, and  finally,
  268. it  will only stay on-line for one hour. You have to restart
  269. it  again  after that to get another hour. The advantage  is
  270. that it will not contact another system over the network.
  271. Just  to  make sure this is clear: Once Serv-U is registered
  272. it will NEVER send anything over the network other than what
  273. is needed for regular FTP traffic!
  274.  
  275. When  you  run Serv-U for the first time there  will  be  no
  276. users  and  access will be restricted. To  change  this,  go
  277. through  the  'Setup'  menu items and put  in  your  heart's
  278. desires.  I  advise you to take a look at the next  chapter,
  279. explaining  the various menus, since the security  setup  is
  280. simple  but not totally intuitive (sorry for that, but ...).
  281.  
  282. For network use with a single executable shared between many
  283. users  that need their own settings, the program  looks  for
  284. the existence of an environment variable with the name SERV-
  285. U. If this variable exists, it should be set to the path for
  286. SERV-U.INI.  The program will then use this  file.  If  this
  287. environment variable does not exist, the whole DOS  path  is
  288. searched including the Windows directories. If a file  SERV-
  289. U.INI  is  found somewhere it will be used,  this  way  also
  290. allowing  for a single copy of the executable on  a  network
  291. server  while  having  individual settings  for  each  user.
  292. Finally,  if  SERV-U.INI was still not  found,  it  will  be
  293. searched for and created if necessary in the default program
  294. directory.
  295.  
  296. 1.2 De-installation
  297.  
  298. It  is hard to imagine why, but if for some reason some  day
  299. you  want to get rid of Serv-U then that is just as easy  as
  300. was installing it. Just delete the whole directory where you
  301. put  it,  and that's it! Serv-U does not change  any  system
  302. files and does not place any files in other directories.
  303.  
  304. 1.3 Upgrading
  305.  
  306. Upgrading  from an earlier version of Serv-U is  not  a  big
  307. deal  either: Just copy the new .EXE file over the  old  one
  308. and you're all set. Your old SERV-U.INI file will be used by
  309. the new program so you don't have to re-install anything.
  310.  
  311. 1.4 Known Bugs & Problems
  312.  
  313. At the time this documentation is being written there are no
  314. known bugs left in the program. Everything that was found in
  315. the 1.0x versions has been fixed. There are however still  a
  316. number of known 'problems', even if they are not bugs as far
  317. as I can tell. Let's go over them:
  318.  
  319.      * If you are using FTP Software Inc.'s  TCP/IP software
  320.        and  WinSock stack, make sure you have version 2.3 of
  321.        their  software  and v1.15.1 of their WINSOCK.DLL (or
  322.        anything more recent). Older versions of their socket
  323.        stack will give you a truck load of problems, and not
  324.        just   with   Serv-U.  Their  latest  WINSOCK.DLL  is
  325.        available via anonymous FTP from ftp.ftp.com.
  326.      * According  to  my information, Serv-U does  not  work
  327.        well   with  Sun's  PC-NFS  WinSock  stack,  nor with
  328.        Chameleon's  stack.  As  far  as  I  could  trace the
  329.        problems it seems that in both cases the socket stack
  330.        is  to blame, it is simply not WinSock v1.1 compliant.
  331.        If  you do get it to work (a new version may come out
  332.        that  solves the problems) then please let me know so
  333.        I can pass the advice on to others.
  334.      * Netscape  works well with Serv-U, but it seems  never
  335.        to  close  the  connection when  getting  a directory
  336.        listing,  i.e. the big blue 'N' keeps 'pumping'. This
  337.        is  definitely  a  Netscape bug.  I've  contacted the
  338.        company  about it. Just ignore this behavior, it does
  339.        not affect the actual operations.
  340.  
  341. 1.5 Changes Since Version 1.00
  342.  
  343. Many  little  things were changed since v1.00. Most  of  you
  344. will not notice the majority of the changes, but some of the
  345. them were needed to fix pretty Big Bugs. Below is a list  of
  346. what was done:
  347.  
  348. Version 1.1, released 19 March 1995:
  349.    * Fixed  some spelling errors in messages. Fixed  logging
  350.      to  screen for time-out messages. Added log message  in
  351.      case  limit  of  nr.  of users is  reached.  Added  log
  352.      message when server is (re)started.
  353.    * Added lots of logging.
  354.    * The  SYST command now replies with the code for a  UNIX
  355.      system.  This  is  because  some  clients  use  it   to
  356.      determine the format of directory listings.
  357.    * Time-out values for idle/hung connections are now  part
  358.      of server setup.
  359.    * Drastically   increased  packet   time-out   for   data
  360.      transfer, now set at 5 minutes (was 30 seconds). Should
  361.      be   sufficient   to  allow  transfer   even   on   bad
  362.      connections.
  363.    * Log  messages  for  failed data transfers  now  have  a
  364.      specification showing why.
  365.    * Fixed  bug  that caused path for anonymous  users  with
  366.      root as home directory to be  reported without a '\' at
  367.      beginning. The same bug caused absolute paths in CWD to
  368.      be processed incorrectly.
  369.    * Changed  the HELP response to make WS_FTP work properly
  370.      with Serv-U.
  371.    * Added  support  for transfer to/from ports  (PRN:  AUX:
  372.      LPTx: and COMx:).
  373.    * Made  a work-around for FTP Inc.'s WinSock stack.  This
  374.      stack  does not handle SO_LINGER properly on closing  a
  375.      socket, causing 'data channel in use' errors.
  376.    * Fixed bug that caused random truncation of PUT files in
  377.      combination with some clients.
  378.    * Fixed bug that allowed users to get 'dir' listings  for
  379.      paths with explicitly no access set to them.
  380.    * Fixed  bug causing 'dir' with absolute path name to  go
  381.      wrong.
  382.    * Changed  response messages to file transfers, only  the
  383.      filename is shown now, not the path name.
  384.    * Added  a  retry period for the server to  come  online.
  385.      This  should solve problems with socket stacks that  do
  386.      not  allow  to re-use a port immediately after  closing
  387.      it.
  388.    * Changed  the timing of the '150-' response message  for
  389.      PASV   transfers.  It  is  now  sent  after  the   data
  390.      connection is established instead of at the time  of  a
  391.      transfer command.
  392.    * The   listening   socket  will  now  automatically   be
  393.      restarted when killed by the socket stack. Some  stacks
  394.      kill  listening  sockets without  reason  (Trumpet  for
  395.      one).
  396.    * Fixed  a bug that made RMD (=remove directory) fail  if
  397.      the  directory  was on a drive other  than  the  active
  398.      drive.
  399.    * Username 'FTP' is now synonymous to 'ANONYMOUS'.
  400.    * Fixed bug in very long directory listings (>64K data).
  401.    * Clients  that connect but never log in are  now  kicked
  402.      off the system after 5 minutes.
  403.    * User   can   now  select  the  try-out  method:   Fully
  404.      functional  with contacts to my permission server,  or,
  405.      crippled but no permission server contacts.
  406.    * Installed  selectable  path  mechanism  for  anonymous:
  407.      Either  absolute paths (like a regular  user)  allowing
  408.      for  drive  changes,  or paths  relative  to  the  home
  409.      directory (needed for WWW browsers).
  410.    * Changed registration key to work with user/company name
  411.      instead  of IP number. Every time Serv-U is started  it
  412.      tries  to  read the key from a file KEY.TXT. Registered
  413.      version  displays  the key in the "About"  box  and  in
  414.      reply to the FTP HELP command.
  415.    * Changed  the  RETR and STOR replies (used for  GET  and
  416.      PUT).  They  are now conform the average  UNIX  system.
  417.      This  makes  WS_FTP more happy, so it shows a  progress
  418.      bar while downloading.
  419.  
  420. Version 1.00:
  421.    * Initial release 7 February 1995
  422.    
  423. 1.6 A Word to the Wise (but paranoid)
  424.  
  425. Many  a word has been spent on the alt.winsock newsgroup  in
  426. recent  weeks on the try-out enforcement practice of Serv-U,
  427. and  in a broader sense on the security of network programs.
  428. If  you  choose  for the 'fully functional try-out  version'
  429. then this program will communicate with a remote system  (my
  430. PC  in fact) to determine if it should be allowed to run  or
  431. not. That is the way the 30 days of try-out are enforced. To
  432. that  effect, information is exchanged between your  PC  and
  433. mine, and as people remarked: How do I know that my password
  434. file  is  not being sent over? Another, but similar question
  435. is:  How  can  I  be sure there are no 'back doors'  in  the
  436. server, allowing access to the author at any time? The short
  437. and  hard  answer is: You don't know and you  can  never  be
  438. sure!
  439.  
  440. I know this is not much of a deal, so I'll at least give you
  441. one option to establish my good intentions. To anyone who is
  442. interested,  I offer to personally go over the  source  code
  443. with  him/her (all 11000+ lines of it) and we'll compile  it
  444. on the spot. You will understand that I am not going to hand
  445. out  any  source  code. If you want to take  it  home  you'd
  446. better bring along a whole lot of $$$'s!
  447.  
  448. It  is worthwhile to realize that security is a problem with
  449. any  type  of  network  program. It is  fairly  easy  for  a
  450. programmer  to put code in, for example, a WWW browser  that
  451. will  wait for 5 months, until full moon and Venus coincide,
  452. then  monitors PC activity and if a user hasn't been present
  453. for  a  few  hours, or if it's 4 in the morning, will  start
  454. sending  over  the whole hard disk to unknown  destinations.
  455. This  kind of thing is not easy to detect, don't let  anyone
  456. tell  you  otherwise, and I still have to  meet  the  system
  457. manager that keeps a network monitor running 24 hours a day,
  458. year after year and actually reads the log files. The bottom
  459. line  is that you will have to trust the author of a program
  460. at some point, there is no other choice!
  461.  
  462.  
  463. 2. THE GRAND TOUR - MENUS
  464. =========================
  465.  
  466. The menus and associated dialog boxes have been designed  to
  467. be  as simple as I could make them while still providing the
  468. needed  features  and flexibility. The next paragraphs  take
  469. you  on a grand tour through all of them. I highly recommend
  470. you to take a closer look at the part about setting up users
  471. and  security  under  'Setup  - Users/Groups'.  The  default
  472. settings  have been chosen to be both secure and reasonable.
  473. Make sure you know what they are about before changing them.
  474.  
  475. 2.1 The File Menu
  476.  
  477. The 'Logging' option can be checked to enable logging of FTP
  478. events  to  a file. If unchecked, logging will be to  screen
  479. only.  This option is only available if a logfile  has  been
  480. specified under the 'Setup - Logging' menu choice.  Changing
  481. logging  through the 'File - Logging' menu will only  affect
  482. the  current session. The changes are not saved and the next
  483. time you start Serv-U logging will again be as specified  in
  484. 'Setup  -  Logging'. This can be convenient if, for example,
  485. you  want  to temporarily switch logging on/off for  testing
  486. purposes.
  487.  
  488. The other option is 'Exit', guess what that does . . .
  489.  
  490. 2.2 The Edit Menu
  491.  
  492. You'll  find only two options here: 'Copy' and 'Clear'.  The
  493. first one copies selected text from the Serv-U logscreen  to
  494. the clipboard and 'Clear' wipes the logscreen  clean.
  495.  
  496. 2.3 The Setup Menu
  497.  
  498. This  is  where the fun starts. Almost everything concerning
  499. the  functioning  of Serv-U can be set through  the  'Setup'
  500. menu.  There  are two exceptions: First, if  you  insist  on
  501. allowing access for a user without a password, and,  second,
  502. if you want to make the Serv-U program invisible; meaning it
  503. will  not show up in the list of the task manager.  In  both
  504. cases you'll have to edit the SERV-U.INI file directly.  For
  505. more  information on how to do this, take  a  look  at   the
  506. 'Internals' chapter.
  507.  
  508. The  dialog  boxes where you can fill in your settings  have
  509. not  been made totally bullet proof. It is entirely possible
  510. to  enter  nonsense in certain items and  the  program  will
  511. accept  it  (like  path names that don't  exist,  etc.).  Of
  512. course,  things  might not work exactly as you're  expecting
  513. them  to, but it should not cause the program to crash.  The
  514. bottom  line  is that it is your responsibility  to  provide
  515. settings that make sense.
  516.  
  517. Now,  let's  continue  with  the 'Setup'  menu  choices  and
  518. associated dialog boxes.
  519.  
  520. The 'Setup - FTP-Server' option
  521. This  menu  choice will lead you to a dialog box  containing
  522. matters  directly related to the workings of the FTP  server
  523. itself.
  524. The  first  item  is 'FTP port number'.  This  is  the  (you
  525. guessed it!) port number that the server will listen on  for
  526. incoming  FTP clients. The default is number 21, but  you're
  527. free  to  fill in anything you want, provided  it  does  not
  528. conflict with other network programs. Of course, the rest of
  529. the  world  expects a FTP server to listen on port  21,  but
  530. changing to another number is one great way of insuring that
  531. only  you  and  some selected friends will know  about  your
  532. server. One fun choice is to set this to port number 23  and
  533. then use a telnet program  to 'telnet' to your own PC.
  534.  
  535. The  next  item is the 'Maximum number of users'. With  this
  536. you  set  the  maximum number of simultaneous users  at  any
  537. given  moment.  Setting it to 0 will  not  allow  anyone  to
  538. enter, leaving it blank will allow an unlimited number,  or,
  539. more precisely, until the PC runs out of network sockets. If
  540. you  need  your PC for regular work as well as being  a  FTP
  541. server,  it  is  probably wise to set a  maximum  so  normal
  542. operations  will  not be slowed down too  much  by  clients.
  543. Likewise, 'Maximum number of anonymous' limits the number of
  544. 'Anonymous' users at any given moment. If 'Maximum number of
  545. users'  is specified, then this will limit the total  number
  546. of  users,  both  regular and anonymous,  even  if  'Maximum
  547. number of anonymous' is set to a larger number.
  548.  
  549. Some people have asked what would be reasonable settings for
  550. the maximum number of users that would still keep the system
  551. workable. The answer is: It depends. It depends very much on
  552. whether these users are local and thus capable of using up a
  553. large bandwidth in data transfer, or alternatively, if these
  554. users  are  further  away  on the Internet  and  cannot  get
  555. transfer  speeds  of more than about 10 Kbytes  per  second.
  556. Another  concern  is the socket stack. Some  WinSock  stacks
  557. start  behaving erratically when they have to service  large
  558. numbers of sockets. Most notoriously is the Microsoft 32-bit
  559. stack, which has the tendency to kick the system back to MS-
  560. DOS  without  any warning when heavily loaded.  For  my  own
  561. server I have set the limit to 10 simultaneous users.  Since
  562. I  mostly  get  relatively slow long distance  traffic  this
  563. means in practice that I have never noticed any slowdown  in
  564. system response while using it for other work and the server
  565. has  remained stable. If you use a dedicated  PC  as  a  FTP
  566. server  it  is  probably safe to go to about 20 simultaneous
  567. users.
  568.  
  569. To   make  sure that users cannot log onto your  server  and
  570. keep  connections open until eternity it is possible to  set
  571. 'Time-out  users' and 'Time-out anonymous'. If a  connection
  572. has  been  idle  for  more than the number  of  minutes  you
  573. specify here it will be automatically closed. Filling  in  0
  574. or  leaving it blank switches off the time-out. It is a good
  575. idea to fill in some values here, since otherwise the system
  576. would  slowly fill up with sockets that for some reason  got
  577. stuck,  not  to  mention  users that  connect  and  start  a
  578. transfer  just before they leave the office in  the  evening
  579. and  then  go  home.  Default  values  are  15  minutes  for
  580. anonymous  users  and  10 hours (=600 minutes)  for  regular
  581. users.
  582.  
  583. If you would like to leave your PC wide open for the rest of
  584. the  world  you can uncheck the 'Enable security'  checkbox.
  585. But  beware:  DISABLING SECURITY WILL ALLOW ANYBODY  ON  THE
  586. NETWORK  TO DELETE/CHANGE/COPY EVERYTHING ON YOUR PC!!!  The
  587. only  reason  I put this option in is to make  it  easy  for
  588. people  that have their own local network and don't want  to
  589. mess with users and passwords. By default this option is, of
  590. course, checked. DO NOT EVER LEAVE THIS OPTION UNCHECKED  IF
  591. YOUR PC IS CONNECTED TO THE INTERNET!!!
  592.  
  593. The   last  item  is  the  'Relative  paths  for  anonymous'
  594. checkbox. By default this is checked and it causes anonymous
  595. users  to  see  all directories and path names  relative  to
  596. their  home  directory.  So, if your  anonymous  users  have
  597. '\USERS\ANONFTP' as their home directory, they will  receive
  598. back  '\' when they inquire with the PWD command. Similarly,
  599. every reference they make to a file or a change of directory
  600. is  taken  relative to this path. The main reason it  is  in
  601. there  is because WWW browsers need read access to  the  '/'
  602. (=root)  directory to make them work. This way they  believe
  603. they  have access to the root and are happy, while on  a  PC
  604. you don't always want to give users access to your real root
  605. directory. The disadvantage of having this mechanism is that
  606. anonymous  users are restricted to their home directory  and
  607. below,  nor  do they have access to other drives.  Sometimes
  608. you  want  them  to be able to do this and  unchecking  this
  609. option will allow that. Anonymous users will then be treated
  610. like  any other user as far as path names are concerned  and
  611. they  will  be  able to change to parallel paths  and  other
  612. drives if their access rights permit this.
  613.  
  614. The 'Setup - IP-Access' option
  615. This  dialog  box provides the means to restrict  access  to
  616. your FTP server to certain IP-numbers. If  for example,  you
  617. work  at a university and only want your faculty members  to
  618. be able to access the server, then this is a great way to do
  619. it.  In  the  upper left corner of the dialog  box  you  can
  620. choose  which type of rules you want to specify:  'Deny'  or
  621. 'Allow' rules. The deny rules decide who should be kept out,
  622. the  allow rules indicate who should be welcomed. THE  ORDER
  623. OF  THE  RULES  IS  IMPORTANT! When a  client  contacts  the
  624. server, the deny rules are looked at FROM TOP TO BOTTOM.  If
  625. no  matching  rule is found, the allow rules are  evaluated,
  626. again  from top to bottom. The first matching rule  applies,
  627. and  evaluation is stopped. If there are no IP-access  rules
  628. everybody can enter the FTP server. As soon as there is  one
  629. rule,  only  those  clients that pass  the  rule  check  are
  630. allowed to enter.
  631.  
  632. You  can type in a new rule in the 'Rule' edit and then  use
  633. the  'Add' button to add the rule to the list. The  'Remove'
  634. button  will  remove the currently selected  rule  from  the
  635. list.  To  change the order of the rules you have to  select
  636. one  by clicking the mouse on it, and then use the 'Up'  and
  637. 'Down' buttons to move it around.
  638.  
  639. Rules  are  nothing more than IP-numbers or  ranges  of  IP-
  640. numbers. There are two special characters: the star '*'  and
  641. the  hyphen '-'. A star functions as a wildcard for checking
  642. the  number. Any number will match that section of the  rule
  643. if  it  is  a star. The hyphen is used to denote a range  of
  644. numbers. Simply separate the starting and ending values by a
  645. hyphen. For example, say all IP-numbers in your company look
  646. like  134.56.34.xxx with 'xxx' being any  number.  Now,  you
  647. want  to restrict access to your FTP server to other members
  648. of  your  company  only. The way to do it is  to  create  an
  649. 'Allow' rule that looks like this:
  650.  
  651.      134.56.34.*
  652.  
  653. That's  simple, isn't it!? Likewise, if you  know  that  the
  654. competition has IP-numbers in the range 168.76.xxx.xxx,  you
  655. can keep them out of your server with the 'Deny' rule:
  656.  
  657.      168.76.*.*
  658.  
  659. Now,  you  need  to  share some of your  files  with  a  few
  660. colleagues, and management in your company is too  cheap  to
  661. install  a local network. You find out that their PC's  have
  662. IP-numbers  134.56.34.128, 134.56.34.129 and  134.56.34.130.
  663. You  could of course make three 'Allow' rules, each with one
  664. of  these  numbers. A faster way to do this  is  to  make  a
  665. single rule like this:
  666.  
  667.      134.56.34.128-130
  668.  
  669. The  special characters '*' and '-' don't need to be at  the
  670. end of the IP-numbers, any place will do. The rule 221.*.76-
  671. 154.89  is  perfectly OK. I wouldn't know  when  you'd  need
  672. this,  but,  hey,  the world is a strange  place!  Remember,
  673. order  is  important  and deny rules  are  always  evaluated
  674. before the allow rules. Experiment a bit, and you'll get the
  675. hang of it.
  676.  
  677. The 'Logging' option
  678. This dialog box lets you specify what events you want to log
  679. and  where to log them to: either to screen only or to  both
  680. the screen and a logfile. If you are interested in the exact
  681. format of the logfile, it is described in detail further  on
  682. in this manual.
  683.  
  684. The  first  two  items deal with logging to a  logfile.  The
  685. first  one, 'Enable logging to file' switches writing  to  a
  686. logfile  on or off. The second item, 'Logfile' is meant  for
  687. entering the path and file name of a file to write  all  the
  688. log  messages to. Of course, logging will only work  when  a
  689. valid logfile name is entered, it has to be a full path name
  690. including a drive letter. Log messages will always be  shown
  691. on screen, regardless of these settings.
  692.  
  693. The next items are a list of events for which logging can be
  694. enabled  or disabled. The items are self descriptive  except
  695. maybe  for  the  last  two. 'Log FTP  commands'  logs  every
  696. command  as  it  is  received by the  server  and  'Log  FTP
  697. replies' logs the command replies that are sent back by  the
  698. server  to the client. These two options are mainly intended
  699. for diagnostic purposes and are switched off by default. The
  700. default value of the other options is 'on'.
  701.  
  702. The 'Setup - Signon/Signoff' option
  703. Your  FTP-server can display a welcome message every time  a
  704. user  connects  to  it. This can be very useful  to  provide
  705. users with information about your FTP server, like where  to
  706. find  games, or 'Serious Software'. Likewise, you might want
  707. to  say good-bye to them when they leave, or remind them  to
  708. send  that  check . . . The way to do this is by entering  a
  709. text in the 'Signon/Signoff' dialog box.
  710.  
  711. There  are  a few special characters that you can  enter  in
  712. your signon/signoff text which get expanded while being sent
  713. to a client. These are:
  714.  
  715.      %t   - displays the current time on your PC
  716.      %d   - displays the current date on your PC
  717.      %u   - displays the current number of  Serv-U  users
  718.             logged in
  719.  
  720. So, you could use the following signon text:
  721.  
  722.      Welcome, it is %t on %d, and you are user number %u
  723.  
  724. I'm  sure you'll figure out by yourself what this will  look
  725. like  to  the user . . . If you have ideas for other  useful
  726. special characters, let me know about it!
  727.  
  728. The 'Setup - Users' option
  729. Unless you switched off all security, you are going to  have
  730. to  set up users. And, you guessed it, this is the place  to
  731. do so!
  732.  
  733. Upon  choosing this option a dialog box is presented to you.
  734. It  contains  a  list  of all known  users.  To  change  the
  735. settings  for  a certain user, just click on  the  name  and
  736. click 'Edit' (or just double-click on the name). Now, if you
  737. just started this server for the first time there will be no
  738. names,  short  of Divine Intervention. Never mind,  just  go
  739. ahead  and click 'Edit'. You'll be presented with  an  empty
  740. dialog  box  containing  entries for everything  you  always
  741. wanted to set for a user.
  742.  
  743. The  next thing is important, so pay attention: You can fill
  744. in or change any name in the 'User name' field. If this name
  745. does  not  exist it will be added to the list of  users.  If
  746. this name exists, the settings for this user will be changed
  747. to  the ones in the dialog box. So, if you double-clicked on
  748. user  'James'  and  then  go  on  to  set  his  password  to
  749. 'lightbulb' and you change the user name to another of  your
  750. users, 'Tanya', then Tanya is going to be mighty upset  when
  751. she  tries  to enter your FTP server! James will  of  course
  752. have to remember his old password, since nothing changed for
  753. him.  This  way  of dealing with users might strike  you  as
  754. somewhat  strange. The advantage of it is that you can  take
  755. an  existing user and, by making only the few needed changes
  756. turn it into a new user.
  757.  
  758. Now  let's take a closer look at the various fields  in  the
  759. 'Edit  User'  dialog box. I've dealt with  the  'User  name'
  760. field, so this brings us to 'Group name'. Every user can  be
  761. part  of a group. The convenience in making users part of  a
  762. group is that you can leave common settings for all users of
  763. a particular group blank and just fill them out in the 'Edit
  764. Group'  dialog  box.  This goes for all settings,  including
  765. password, home directory and path access rules. To  overrule
  766. a certain group setting, simply provide one for the user.
  767.  
  768. For  example,  you're the Pentagon system administrator  and
  769. want to create FTP access for everybody in case they are  on
  770. field trips. So, you hook up this old PC to the net, install
  771. Serv-U  and register it (hypothetical situation).  Then  you
  772. proceed to create a group 'StarWars'. Now you go on  to  set
  773. the  password  for  this group, 'RonaldR',  and  their  home
  774. directory    (all   their   files   are   shared    anyway),
  775. 'y:\super\secret\starwars'. You fill  in  some  access  path
  776. rules  as well, and you're all set: The only thing  left  is
  777. entering the user names, you don't have to provide any other
  778. information per user. A 10 minute job.
  779. Now  there's this occasional guest user, 'BillyC'. You don't
  780. want him to get into certain directories, so you make him  a
  781. member  of  the group but specify those directories  in  his
  782. access path rules with 'no access', and you're all done.
  783.  
  784. We  did  get  ahead  of ourselves in the discussion  of  the
  785. various  fields,  so  let me back up a bit.  The  'Password'
  786. field  shows stars ('*****') when entering a password. Don't
  787. worry, this is only to protect you from prying eyes. Also if
  788. you're  editing an existing user who has a password, nothing
  789. will be shown here, but the password is still there. To keep
  790. the existing password for a user: don't edit this field! The
  791. passwords  are  stored encrypted using  UNIX  'crypt'.  This
  792. algorithm works like a sausage machine: you put in a pig  on
  793. one  side  and  turn the crank, out comes the sausage.  But,
  794. pushing  in  the  sausage while turning the crank  backwards
  795. will  not get you a pig! It is quite secure, I wouldn't know
  796. of  a way to get the plain text password back (the NSA might
  797. though).
  798.  
  799. The  'Home directory' field is for the user's home directory
  800. (to kick in an open door). This is the place where he or she
  801. is  put immediately after logging in. Each user needs a home
  802. directory,  without one the server will not  permit  logging
  803. in.  Of course, if a user is part of a group, and this group
  804. has a home directory you don't have to specify one here. You
  805. might  want to, if this user needs a different one from  the
  806. rest  of the group. Home directories always need to be  full
  807. path names, including a drive letter!
  808.  
  809. This  brings  us  to the last part of this dialog  box,  the
  810. 'File/Directory  access' rule list.  This  list  contains  a
  811. number  of  paths  with access information coupled  to  each
  812. path.  Access to the PC is only allowed according  to  these
  813. paths  and  their  access information. No access  paths,  no
  814. access! So, there is one path you might always want to be in
  815. the list: The user's home directory.
  816.  
  817. When  a  user  executes a FTP command  concerning  files  or
  818. directories, the user's path list is checked to see  if  the
  819. command  should be allowed to proceed. The list is evaluated
  820. FROM TOP TO BOTTOM! SO THE ORDER OF THE PATH ACCESS RULES IS
  821. IMPORTANT!!!
  822.  
  823. There  are  five different types of access information  that
  824. can be set for each path:
  825.      * 'Read'  access, this allows files to be  copied  from
  826.        the PC using the FTP 'get' command.
  827.      * 'Write' access, allowing files to be copied to the PC
  828.        using 'put', but not changed, deleted, or renamed.
  829.      * 'Delete' access, allowing the user to  change  files,
  830.        rename,   or  delete  them.  Having  'Delete'  access
  831.        automatically includes write access.
  832.  
  833. The last two items deal with directories:
  834.      * 'Create' access lets the user create  new directories
  835.        at this path.
  836.      * 'Delete' lets the user delete directories.
  837.  
  838. To  get  a  directory  listing any one of  these  rights  is
  839. sufficient  for  a  path. If none of the  rights  have  been
  840. granted for a certain path, then the user has no access what-
  841. so-ever to this path.
  842.  
  843. The rights of a certain path are valid not only for the path
  844. itself, but also for all subdirectories of it. If you  don't
  845. want  this to happen for a certain subdirectory you have  to
  846. specify  this directory with the desired rights  before  its
  847. parent in the list of paths.
  848.  
  849. Since  one  example can say more than a thousand  words,  or
  850. something  along  that line, let's work  through  a  typical
  851. situation. Assume you want to setup an 'Anonymous' FTP site.
  852. This  needs a directory tree with all the goodies the  users
  853. might  want, for which they need read access. You also  need
  854. an  upload directory where users can upload new goodies, but
  855. you  don't  want others to be able to immediately get  their
  856. fingers  on  it, since you want to check for viruses  first.
  857. So, this directory needs write but no read access. We decide
  858. to  put everything on the big network drive, 'Y:', under the
  859. 'ANONFTP'  directory. We also create the 'UPLOAD'  directory
  860. here  for  uploads.  In  Serv-U we  would  create  the  user
  861. 'Anonymous'  with the following access path  rules  (and  in
  862. this order):
  863.  
  864.      Y:\ANONFTP\UPLOAD   - write rights
  865.      Y:\ANONFTP          - read rights
  866.  
  867. Reversing the rules will not work: If a user would write  to
  868. the  upload  directory  the security  mechanism  will  check
  869. against   Y:\ANONFTP  and  conclude   that   UPLOAD   is   a
  870. subdirectory, so the rule applies, and the rule grants  only
  871. read access. Please take note that write access still allows
  872. a  user  to get a directory listing of the UPLOAD directory,
  873. but he won't be able to download anything from there.
  874.  
  875. If  the  drive letter is left out of a path, it applies  for
  876. all  drives. So, a fast way to get full access to all  files
  877. on all drives is:
  878.  
  879.       \                  - read, write, delete, create dir
  880.                            and delete dir rights
  881.  
  882. Now,   the   same  mechanism  that  determines   access   to
  883. directories also applies to files. It is possible  to  grant
  884. access to specific files on a per-file basis. Lets take  the
  885. previous example about the anonymous FTP server. We want  to
  886. put a file 'SECRET' in the ANONFTP directory, but nobody  is
  887. allowed  to  read  it of course. So, our access  paths  list
  888. would look like this:
  889.  
  890.      Y:\ANONFTP\SECRET   - no rights
  891.      Y:\ANONFTP\UPLOAD   - write rights
  892.      Y:\ANONFTP          - read rights
  893.  
  894. Again,  the  order of the paths is important! The  directory
  895. access   rights   do  not  have  any  meaning   for   files.
  896. Alternatively, if SECRET was a directory instead of a  file,
  897. the  above  settings would keep users out of this directory.
  898. In  fact,  they  would not even be able to get  a  directory
  899. listing.
  900.  
  901. Serv-U  also  allows  access to all PC ports:  PRN:,  LPT1:,
  902. LPT2:,  LPT3:, LPT4:, AUX:, COM1:, COM2:, COM3:, and  COM4:.
  903. This  can  be  a  convenient way of setting up  a  'network'
  904. printer  by  transferring files directly to PRN: using  FTP.
  905. These  ports are treated like any regular path name, a  user
  906. needs  access rights to use them. So, to make a  printer  on
  907. PRN:  accessible  and a modem on COM2: the  user  needs  the
  908. following rights:
  909.  
  910.      PRN:                - write and delete rights
  911.      COM2:               - read,  write  and  delete
  912.                            rights
  913.  
  914. The  buttons  speak for themselves, so I'll  not  waste  any
  915. bytes on them.
  916.  
  917. There  are two special user names, although in setting  them
  918. up  they are dealt with exactly the same as any other  user.
  919. These  are  the user names 'Anonymous' and 'ALL'.  (Actually
  920. there  are three special names: User name 'FTP' is taken  to
  921. be synonymous to 'Anonymous'.)
  922.  
  923. We  already came across 'Anonymous', it allows users to  log
  924. in  without a password. The FTP server asks for their E-mail
  925. address instead and logs this. The 'Password' section in the
  926. 'Setup  Users' dialog box is ignored for this user name.  If
  927. an  anonymous  user logs in, he will normally  not  see  the
  928. whole  file structure. To him everything will appear  to  be
  929. relative  to  the home directory. So, to abuse our  previous
  930. example yet another time: After logging in he will be put in
  931. Y:\ANONFTP, but if he asks for the current path  the  server
  932. will answer '\'. All actions concerning files will, also, be
  933. relative  to  his home directory. The reason for  making  it
  934. this  way  is that certain World Wide Web browsers that  log
  935. into   an  anonymous  FTP  server  will  execute  a  'change
  936. directory'  to '\' immediately thereafter. They  get  mighty
  937. confused  if  this  is  refused, so  by  making  their  home
  938. directory appear to be '\' this is avoided.
  939.  
  940. The  other  special user name is 'ALL'. Now where does  this
  941. tie  in?  Well,  every action requiring  security  clearance
  942. (checking  a password during login, reading, writing,  etc.)
  943. is  first  checked against the settings for  the  particular
  944. user. If no appropriate setting is found there, and the user
  945. belongs  to  some group, the group settings are checked.  If
  946. still  no corresponding setting is found, the user 'ALL'  is
  947. consulted  (if it exists). So 'ALL' works as a  blanket  for
  948. all  users,  providing the most common settings. Of  course,
  949. this  also provides a potentially big security hole,  so  be
  950. careful!
  951.  
  952. The 'Setup - Groups'  option
  953. Choosing this presents you with exactly the same dialog  box
  954. as  the 'Setup - Users' section. The only difference is that
  955. you  cannot fill in a user name. Everything works  the  same
  956. way  too,  so I'll let you figure it out. Of course,  you're
  957. not dealing with users here but with group names.
  958.  
  959. 2.4 The Help Menu
  960.  
  961. This  menu choice is still a bit underdeveloped, it has only
  962. the  'About' item. This does however present you with a very
  963. beautiful 'about' box, thus more than making up for the lack
  964. in  other  areas. This is also the place where you will  see
  965. your name or that of your company appear once the program is
  966. registered.
  967.  
  968. 2.5 The Logfile and Screen
  969.  
  970. Although  they are strictly speaking not part of the  menus,
  971. this  is  a  convenient place to discuss the format  of  the
  972. logfile and screen messages.
  973.  
  974. Messages  are always logged to the Serv-U window, regardless
  975. of  the logfile settings. There is no difference between the
  976. messages  on  screen and the ones in the  logfile,  although
  977. some  things are only shown on screen. The latter are server
  978. and  program  related matters, like version  number,  server
  979. going on/off-line etc.
  980.  
  981. Log  messages  always have the same layout. The  reason  for
  982. using  such a strict format is to make it easier  to  search
  983. for  specific  messages or certain types of  messages.  This
  984. also makes it possible to do automatic accounting by machine
  985. reading the logfile if you need it. The logfile can be  read
  986. or copied at any moment (It is also possible to get the file
  987. via  FTP using Serv-U itself!), even when Serv-U is running.
  988. The format is as shown below, in stylized form:
  989.  
  990.      [n] DATE TIME - (xxxx) MESSAGE
  991.  
  992. The first number, 'n', indicates the type of message that is
  993. being logged. Currently there are six different categories:
  994.  
  995.      1    - system messages (problems etc.)
  996.      2    - FTP commands (from client to server)
  997.      3    - GET file transfers
  998.      4    - PUT file transfers
  999.      5    - security related events (users logging in etc.)
  1000.      6    - FTP replies (from server to client)
  1001.  
  1002. The  second  number, 'xxxx', is a unique ID  assigned  to  a
  1003. client  the  moment  the connection  is  made.  All  further
  1004. messages  concerning that client will use the  same  number.
  1005. Again,  this  was  done  to make it  easy  to  do  automated
  1006. accounting,  or,  to  find back events  using  the  'search'
  1007. facilities of every editor.
  1008.  
  1009.  
  1010. 3. THE INNER WORKINGS
  1011. =====================
  1012.  
  1013. Before  I  go on to describe the settings of the  SERV-U.INI
  1014. file  I want to spend a few words describing how Serv-U  was
  1015. made and how it goes about its job.
  1016.  
  1017. 3.1 Serv-U Internals
  1018.  
  1019. The  program was written using Borland C++ version  3.1.  To
  1020. check  for shaky pointers and catch all those resource leaks
  1021. the  program  Bounds Checker version 2.1  from  Nu-Mega  was
  1022. used.  I  think  no  serious Windows  programmer  should  be
  1023. without the latter, very recommended!
  1024. This  whole  project  started about a year  ago  after  much
  1025. disappointment with the existing FTP servers for WinSock. In
  1026. its  current version it consists of just a little over 11000
  1027. lines  of  C++ code, divided into 16 C++ classes. The  whole
  1028. program was constructed from scratch, not using any existing
  1029. FTP server code, and is tailored to MS-Windows and WinSock.
  1030.  
  1031. Internally, everything is very much compartmentalized, using
  1032. a  different class for different partial tasks. There  is  a
  1033. WinSock   class  library,  providing  hi-level   access   to
  1034. WinSockets  and hiding all the nasty parts of  dealing  with
  1035. them.  It  uses  100% asynchronous WinSock  functions  (also
  1036. called 'non-blocking' functions) thus avoiding problems with
  1037. multiple active sockets for a single task and re-entry  (let
  1038. me  know  if  you're interested in this class  library,  I'm
  1039. thinking  of selling it in source code format). There  is  a
  1040. FTP-manager class, taking care of listening for clients, and
  1041. setting  up  instances of the FTP-command interpreter  class
  1042. when this happens. The latter does the actual interpretation
  1043. of  the  FTP  commands, talking to the  security  class  for
  1044. clearance  and  the  WinSock class for communications.  Then
  1045. there are some utility-like classes, like those dealing with
  1046. setup  and  logging. By having all these  compartments  that
  1047. handle  very well defined tasks, I hope to be able to easily
  1048. extend  this  FTP  server  and  fix  those  (hopefully  few)
  1049. remaining bugs quickly!
  1050.  
  1051. 3.2 The SERV-U.INI File
  1052.  
  1053. All  the  settings  for the server, users,  and  groups  are
  1054. stored  in a single file in text format. This file is always
  1055. named  SERV-U.INI. When the program is started it looks  for
  1056. this  file  in  a  number  of different  places:  First,  an
  1057. environment  variable SERV-U is checked.  If  this  variable
  1058. exists  it  should  be set to the path where  SERV-U.INI  is
  1059. found. Next, if this variable does not exist, the whole  DOS
  1060. path  is  scanned,  including the Windows  directories.  The
  1061. first  SERV-U.INI file found on the way is used. This  makes
  1062. it easy to set things up for network users where there is  a
  1063. single  copy  of  the program but each user  needs  its  own
  1064. settings. If after this no .INI file has been found yet  the
  1065. directory  of  the Serv-U program is searched. If SERV-U.INI
  1066. is  found  here  it will be used, if not, the  program  will
  1067. create one, in the program directory.
  1068.  
  1069. We'll  now  go over all the items that can appear  in  SERV-
  1070. U.INI. I will show you an invented setup file:
  1071.  
  1072.      [GLOBAL]
  1073.      Security=TRUE
  1074.      PortNr=23
  1075.      MaxNrUsers=15
  1076.      MaxNrAnonymous=10
  1077.      Invisible=TRUE
  1078.      Logfile=c:\serv-u\logfile.txt
  1079.      Logging=YES
  1080.      TimeoutUser=600
  1081.      TimeoutAnonymous=15
  1082.      TryOut=Crippled
  1083.      LogGETs=ON
  1084.      LogPUTs=ON
  1085.      LogSystemMes=ON
  1086.      LogSecurityMes=ON
  1087.      LogFTPCommands=OFF
  1088.      LogFTPReplies=OFF
  1089.      RegistrationKey=S%FgdfsdEvG,Rob Beckers,Cat Soft
  1090.      AnonRelPaths=YES
  1091.      Window=100,100,400,300
  1092.      
  1093.      [SIGNONOFF]
  1094.      SignOn1="Welcome to Robby's FTP-Server!"
  1095.      SignOn2="It is %t local time on %d and you are user nr.
  1096.      %u"
  1097.      SignOff1="Thanks for logging in!"
  1098.      SignOff2="Hope to see you again soon . . ."
  1099.      
  1100.      [IP-ACCESS]
  1101.      Bounce1=132.68.175.201
  1102.      Bounce2=223.*.*.*
  1103.      Allow1=132.68.176.53
  1104.      Allow2=132.68.175.*
  1105.      Allow3=101.43.23.30-40
  1106.      
  1107.      [USER=Anonymous]
  1108.      HomeDir=d:\anonftp
  1109.      Access1=d:\anonftp\upload,W
  1110.      Access2=d:\anonftp,R
  1111.      
  1112.      [USER=Rob]
  1113.      Group=system
  1114.      Password=WdRx.Jlk0kemm%
  1115.      HomeDir=c:\
  1116.      Access1=\,RWMCD
  1117.      Access2=lpt1:,WM
  1118.      Access3=prn:,WM
  1119.      Access4=aux:,WM
  1120.      Access5=lpt2:,WM
  1121.      Access6=lpt3:,WM
  1122.      Access7=lpt4:,WM
  1123.      Access8=com1:,RWM
  1124.      Access9=com2:,RWM
  1125.      
  1126.      [USER=ALL]
  1127.      HomeDir=y:\
  1128.      Access1=y:\,R
  1129.      
  1130.      [GROUP=SYSTEM]
  1131.      Access1=c:\system,RWDCM
  1132.      Access2=d:\,RWDCM
  1133.      Access3=y:\novell,RWD
  1134.      
  1135. All  but  three  of these settings can be  changed  and  set
  1136. interactively through the 'Setup' menus. The exceptions  are
  1137. the   entries   for   'Invisible',  'RegistrationKey',   and
  1138. 'Window',  and  if  you  desire a user  to  really  have  no
  1139. password  the  entry 'Password=' has to be set manually  for
  1140. that user.
  1141. The  following  paragraphs will describe  each  section  and
  1142. entry in more detail.
  1143.  
  1144. [GLOBAL]
  1145. All  the settings related to the Serv-U program itself, i.e.
  1146. the  functioning of the FTP server and system functions, are
  1147. found in the '[Global]' section.
  1148.  
  1149. If security should not be enforced, the 'Security' entry can
  1150. be  set  to  FALSE or 0. Doing so will leave the FTP  server
  1151. wide  open  to everybody!!! Default value for 'Security'  is
  1152. TRUE.
  1153.  
  1154. The  'PortNr' entry determines the IP port that  the  server
  1155. will listen on. Default value is 21.
  1156.  
  1157. To  limit  the  maximum  number of  simultaneous  users  the
  1158. 'MaxNrUsers' entry should be set to the desired  number.  No
  1159. entry  or a negative number results in no maximum, only  the
  1160. number  of available sockets will limit the number of  users
  1161. in  that case. Similarly, the 'MaxNrAnonymous' entry  limits
  1162. the  maximum number of 'Anonymous' users. The value put here
  1163. is  only  meaningful  if  it is smaller  than  that  of  the
  1164. 'MaxNrUsers' entry.
  1165.  
  1166. For  system  managers that don't want their  users  to  mess
  1167. around with the server settings, it is possible to make Serv-
  1168. U  invisible by setting the 'Invisible' entry to TRUE, 1  or
  1169. YES  and put the Serv-U program in the 'startup' group. When
  1170. this is done the server will not show up in the task manager
  1171. list.  One consequence is that there is no way to  stop  the
  1172. program  short of exiting Windows. Default is  NO  for  this
  1173. entry.
  1174.  
  1175. The  'LogFile' entry should specify a full path and name for
  1176. a  logfile  if  logging  is desired.  There  is  no  default
  1177. logfile. To actually switch logging on and off the 'Logging'
  1178. entry  can  be set to ON or TRUE, or OFF or FALSE. Switching
  1179. logging  ON  will  only work if a logfile is  specified.  By
  1180. default 'Logging' is set to ON.
  1181.  
  1182. The  entries 'TimeOutUser' and 'TimeOutAnonymous' specify  a
  1183. time-out  in  minutes  for respectively  regular  users  and
  1184. anonymous  users. If a FTP connection is left idle  for  the
  1185. indicated amount of time it is automatically closed. Filling
  1186. in  0  results in no time-out. Default values are 15 minutes
  1187. for anonymous and 10 hours for regular users.
  1188.  
  1189. The next one deals with the way the program can be tried out
  1190. (when  there  is  no  registration code).  'TryOut'  can  be
  1191. 'Crippled'  or  'Full'. The first allows  a  user  to  do  a
  1192. maximum 5 GETs and 5 PUTs per session, puts the server  off-
  1193. line  after  1  hour,  and notifies clients  that  they  are
  1194. looking at an unregistered try-out version. However, it does
  1195. not  contact  my permission server. The 'Full' option  gives
  1196. you  no  limitations while trying the program, it is exactly
  1197. equal  to  the registered version. The downside is  that  it
  1198. does  access  my permission server to ask for permission  to
  1199. run each time Serv-U is started. This is how the 30 days  of
  1200. try-out are enforced.
  1201.  
  1202. All  the 'LogXXXX' entries switch logging options on or off.
  1203. Their names say it all, so I'll let you figure them out.
  1204.  
  1205. The   'RegistrationKey'  entry  is  used  for  entering  the
  1206. registration code. You get this code after registration.  By
  1207. default it has no value and for evaluation of the program it
  1208. should be left blank or out of the .INI file.
  1209.  
  1210. 'AnonRelPath'  determines  if  anonymous  users  should   be
  1211. treated   with  all  path  names  relative  to  their   home
  1212. directory. This is desirable for use with WWW browsers  that
  1213. insist  on  having  access  to  the  root  directory  ('/').
  1214. Switching  this on limits anonymous users to the subtree  of
  1215. their home directory, they cannot switch to other drives. If
  1216. you  switch it off then anonymous users will be treated like
  1217. all others. Default it is switched on.
  1218.  
  1219. The  last entry is 'Window' and this is set by Serv-U  every
  1220. time  the  program is stopped. It contains the last position
  1221. and   size   of   the   program  window,   in   the   format
  1222. 'top,left,width,height'
  1223.  
  1224. [SIGNONOFF]
  1225. This  section contains the messages that are displayed after
  1226. a   user  contacts  the  FTP  server  and  just  before   he
  1227. disconnects. Every line has a separate entry with  a  number
  1228. at the end, denoting the order. The signon message is put in
  1229. 'SignOnxx'  entries  (with  xx the  line  number),  and  the
  1230. signoff message is put in 'SignOffxx'.
  1231.  
  1232. There are three special character combinations recognized by
  1233. Serv-U  and they are expanded to their actual values when  a
  1234. user logs on or off. These are:
  1235.  
  1236.      %t   = current time
  1237.      %d   = current date
  1238.      %u   = current number of users that are logged in
  1239.  
  1240. A  tip:  Keep  the  number of lines  and  the  their  length
  1241. limited.  Most  FTP  clients will  mess  up  lines  over  80
  1242. characters,  and  since a FTP reply code is  tagged  to  the
  1243. beginning of these lines before they are sent, it is wise to
  1244. keep them to less then 75 characters.
  1245.  
  1246. [IP-ACCESS]
  1247. This  section  determines which client  IP-numbers  will  be
  1248. allowed  access  to Serv-U. There are two  kinds  of  rules:
  1249. Those  that  refuse access in the form of 'Bounce'  entries,
  1250. and  those that grant access using 'Allow' entries. If  this
  1251. section  doesn't  exist, or no entries are found,  then  all
  1252. clients  are allowed to contact the server. The  reverse  is
  1253. also  true,  if  there is even a single entry  ('Bounce'  or
  1254. 'Allow') then only those clients will be allowed to  contact
  1255. the  server  that  pass the rule. All entries  are  numbered
  1256. ('Allow1',  'Allow2' etc.) and they are evaluated  according
  1257. to  their  number  from  first to last.  Numbers  should  be
  1258. consecutive.  The  'Bounce' rules are evaluated  before  the
  1259. 'Allow' rules.
  1260.  
  1261. The IP-number of the client is matched section by section to
  1262. each  rule until a match is found. If the matching  rule  is
  1263. one of the 'Bounce' ones, the client is disconnected. If the
  1264. IP  number matches an 'Allow' rule then he can proceed.  The
  1265. rules   can   be   exact  IP-numbers,  or  contain   special
  1266. characters. There are two of those:
  1267.  
  1268.      *    = wildcard, match any number
  1269.      -    = denotes a range
  1270.  
  1271. A  quick example: The rule '132.*.76.48-89' will allow entry
  1272. to  clients with an IP-address starting with 132, the second
  1273. section can be anything (0..255), the third must be  76  and
  1274. the  last  section  should  be between  48  and  89  (limits
  1275. included).
  1276.  
  1277. [USER='Name']
  1278. The  information  about a user is stored  in  this  section,
  1279. 'Name'  stands for the user's name. Each user has a separate
  1280. section.  It  contains information needed to authenticate  a
  1281. user  during login, and rules determining what this user  is
  1282. allowed to access. The Serv-U program will first check  this
  1283. section for a regular user. If no applicable information  is
  1284. found  and  the user is a member of a group,  the  group  is
  1285. addressed for the same information. If the result of this is
  1286. still undetermined, the special user name 'ALL' is searched.
  1287.  
  1288. Now  to  the entries that can be found in this section.  The
  1289. identity  of  a user is verified by comparing his  password,
  1290. after encryption, with the one in the 'Password' entry.  The
  1291. UNIX 'crypt()' command is used to encode the passwords. This
  1292. makes it possible to extract users with their password  from
  1293. the  PASSWD file of a UNIX system, the same passwords should
  1294. work  on both systems. Unfortunately, there is not a  single
  1295. standard for password encryption on UNIX systems these days.
  1296. Serv-U uses the most common scheme, but this might not  work
  1297. for your system.
  1298.  
  1299. If  the password matches, the home directory of the user  is
  1300. taken from the 'HomeDir' entry. This should always be a full
  1301. path name, including drive letter!
  1302.  
  1303. To  make  a  user a member of a certain group,  the  'Group'
  1304. entry  can be used. All information needed and not found  in
  1305. the  user's  section; password, home dir and  file/directory
  1306. access, are then  looked for in the group's section.
  1307.  
  1308. Information about file and directory access for  a  user  is
  1309. stored  in  the 'Access' entries. Each of these is numbered,
  1310. and  access information is checked in order: first comparing
  1311. it  to  the  first rule, then the second, etc. The numbering
  1312. must  be consecutive. Access rules start with a path or file
  1313. name.  These  paths are usually full names, including  drive
  1314. letter.  If the drive letter is missing, they apply  to  all
  1315. drives. Also, access rules apply not only to the exact path,
  1316. but to all subdirectories as well. If different settings are
  1317. needed  for a subdirectory, than a rule with that  directory
  1318. should  appear before its parent, i.e. with a lesser number.
  1319. The  path in an access rule is followed by a comma  and  the
  1320. access information itself. This can be a combination  of  up
  1321. to five different characters:
  1322.  
  1323.      R    = read access to files
  1324.      W    = write access to files
  1325.      M    = modify access to files (implies write access)
  1326.      C    = right to create subdirectories
  1327.      D    = right to delete subdirectories
  1328.  
  1329. It is entirely possible to have no access information at all
  1330. (only  a  path). This means that the user will not have  any
  1331. access to that path. For a user to be able to list the files
  1332. in  a  directory he needs at least one of these five rights,
  1333. any  will do. Another thing to realize is that write  access
  1334. to  a file does not imply read access! As you can see it  is
  1335. also possible to specify access rights for the parallel  and
  1336. serial  ports. They are part of the regular security  scheme
  1337. and  to  transfer  to  or from a port a  user  needs  access
  1338. rights.  Then finally, the path in an access rule  does  not
  1339. have to point to a directory. It is also possible to specify
  1340. a  filename. Of course, the 'C' and 'D' rights will not have
  1341. any meaning then.
  1342.  
  1343. There are two special user names: 'Anonymous' and 'ALL'.  If
  1344. there  is  an user 'Anonymous', it will be possible  to  log
  1345. into the server without a password. Instead, Serv-U will ask
  1346. for  the  user's E-mail address and log this.  Most  of  the
  1347. regular  entries  apply  for  'Anonymous'  as  well,  except
  1348. 'Password'  and  'Group', these are ignored.  In  fact,  for
  1349. anonymous users the sections for groups and 'ALL' are  never
  1350. searched.
  1351.  
  1352. The  user 'ALL' is searched if no appropriate rule is  found
  1353. in  a user's or his group's entry. It can contain any of the
  1354. regular entries.
  1355.  
  1356. [GROUP='Name']
  1357. These sections contain the group info. The entries here  are
  1358. exactly  the  same  as  those for a user,  except  that  the
  1359. 'Group' entry has no meaning of course.
  1360.  
  1361.  
  1362. 4. GETTING IN TOUCH - BUGS & REGISTRATION
  1363. =========================================
  1364.  
  1365. I'd  love to hear from you! Not only for bugs, but  also  if
  1366. you  have  ideas, questions, or remarks. Please  drop  me  a
  1367. line! The fastest and easiest way to do so is by E-mail.  My
  1368. address is:
  1369.  
  1370.      RJB@eel-mail.mc.Duke.edu
  1371.  
  1372. Regular  mail  should work as well, but  might  take  a  bit
  1373. longer. My address for this is:
  1374.  
  1375.      Rob Beckers
  1376.      1911 Erwin Road, Apt. I
  1377.      Durham, NC 27705
  1378.      U.S.A.
  1379.  
  1380.  
  1381. 4.1 Reporting Bugs
  1382.  
  1383. Nothing  in  this world is perfect, least of all  me!  Alas,
  1384. chances are that despite careful testing you'll still find a
  1385. bug.  Please don't think others will report it, let me know!
  1386. There  are  a few things I need to know in order to  improve
  1387. chances of fixing the beasty, so take note of the following:
  1388.  
  1389.    * Most  important: Can you get the same bug to appear  by
  1390.      repeating  certain actions! Please try hard, without  a
  1391.      recipe  for repeating a bug it's going to be very  hard
  1392.      to track it down.
  1393.    * What TCP/IP and WinSock stack are you using? Brand/type
  1394.      and  version number please. Also, what operating system
  1395.      (DOS  version  and  Windows  or  Windows-For-Workgroups
  1396.      version  x.xx)?  Any memory manager (QEMM  etc.),  what
  1397.      version?
  1398.    * Please indicate also if this bug is merely cosmetic  or
  1399.      of  vital  importance  for using Serv-U.  Somewhere  in
  1400.      between  is possible as well of course. By the  way,  I
  1401.      consider security related bugs very important!
  1402.    * Finally,  please give me a chance to fix a bug,  before
  1403.      you  start to shout all over the Internet how bad  this
  1404.      program is . . .
  1405.      
  1406.  
  1407. 4.2 Registering Serv-U
  1408.  
  1409. If  you're happy with the performance of Serv-U, then please
  1410. make  me  happy and register this program! Just a few  words
  1411. for  those  who  are in doubt: Making this program  took  me
  1412. (very  literally) months of work, spread out over  the  last
  1413. year.  Your  registration fee is going  to  motivate  me  to
  1414. continue  improving  Serv-U.  In  general,  registration  is
  1415. important  for shareware programs: It makes it possible  for
  1416. you  to  use  professional  quality  software  for  peanuts.
  1417. Lastly, being a biomedical engineering graduate student, I'm
  1418. not  exactly  making lots of $$'s (to put  it  mildly).  So,
  1419. those 20 bucks for registration mean a lot to me!
  1420.  
  1421. To  register,  please fill out the registration  form  below
  1422. (There  is  a  separate  one in ASCII  format  in  the  file
  1423. REGISTER.TXT.)  and  send  it  to  me.  Payment  should   in
  1424. principle  be included with the registration form,  although
  1425. there   are   exceptions  possible  for  foreign   (non-USA)
  1426. customers, to which I'll get in a moment. If you are  inside
  1427. the  US a personal check will do fine. The registration  fee
  1428. is  $20  for each copy. If you want to make me even  happier
  1429. and need several copies, the following license prices apply:
  1430.  
  1431.      The FTP Serv-U license prices:
  1432.      
  1433.      1-9  $20 each
  1434.      
  1435.      License for:
  1436.      20   $200
  1437.      50   $400
  1438.      100  $600
  1439.      100+ $500 per block of 100 users
  1440.      
  1441.      If  you need a license for more than 500 users, we  can
  1442.      negotiate.
  1443.      
  1444.      Educational discount: For licenses of 50 or more users:
  1445.      30% discount.
  1446.      
  1447. Payment  from outside the USA is a problem. Despite all  the
  1448. international networks the easy solutions are costly and the
  1449. cheap  solutions risky. The exceptions are if you are inside
  1450. the  Netherlands, then payment is easy (see further on),  or
  1451. if you're in a European country and can use Euro-checks, see
  1452. below  for details. For non-US customers the following forms
  1453. of payment are accepted, in order of preference:
  1454.  
  1455.      * By Euro-Cheque, for Europeans only. The check must be
  1456.        made out in NLG (=NederLandse Guldens), and the price
  1457.        per copy  is NLG 35. Please don't forget to sign  the
  1458.        check both on the front and the back and to  fill  in
  1459.        the  4 digit  security number on the  back.  Make  it
  1460.        payable to R. Beckers - Bunde. Mail the check to: Rob
  1461.        Beckers;  St.  Agnesstraat  16;  6241CB  Bunde;   The
  1462.        Netherlands.  Please mail the filled out registration
  1463.        form to the US address mentioned on the form.
  1464.      * By check, drawn at an American bank. The check should
  1465.        be  made  out  to  Rob Beckers (Alas,  Cat  Soft only
  1466.        exists in the mind for now).
  1467.      * By American Express Travelers Checks for the  correct
  1468.        amount  in  US dollars. These are cheap and safe, but
  1469.        there  might be a minimum commission charged  by your
  1470.        bank.  The  checks should be made out to  Rob Beckers
  1471.        and don't forget to sign them twice!
  1472.      * By  Postal Money Order.  As I understand it, you  can
  1473.        buy   these   international  money  orders   in  most
  1474.        countries for very little money ($3 here in  the US).
  1475.        Payment  is in your own currency, but the money order
  1476.        should be made out for USD $20 and to Rob Beckers.
  1477.      * By  cash,  but  only  in US dollars  and  I  give  no
  1478.        guaranties about safe arrival! Please DO NOT  send me
  1479.        other currencies, it would probably cost me much more
  1480.        to  convert them to $$'s than it costs you. A trick I
  1481.        found  useful for sending cash in envelopes:  put the
  1482.        money  in a folded sheet of paper so it doesn't shine
  1483.        through   the  envelope.  This  improves  chances  of
  1484.        arrival considerably.
  1485.      
  1486. For  companies buying a site license there are a  number  of
  1487. less  cheap  but  more secure options,  again  in  order  of
  1488. preference:
  1489.  
  1490.      * By direct money transfer in US dollars to my American
  1491.        bank account. This costs you $35 extra, since that is
  1492.        the  atrocious  rate  my bank charges  me  to receive
  1493.        money  this  way. If you are interested,  ask  me for
  1494.        details.
  1495.      * By  sending me a (foreign) check from your own  bank.
  1496.        The  check  should be made out in USD and  payable to
  1497.        Rob  Beckers. Using this option costs you  $18  extra,
  1498.        which is how much my bank charges me for cashing such
  1499.        a check.
  1500.      * By  direct money transfer to my  Dutch bank  account.
  1501.        Only $9 extra for this one, which is what they charge
  1502.        in  the  Netherlands.  Ask me for  details if  you're
  1503.        interested.
  1504.  
  1505. Now for the Dutch:
  1506. Daar  ik nog steeds een Nederlandse girorekening heb is  het
  1507. mogelijk op die wijze te betalen. De prijs bedraagt f. 35,--
  1508. per  kopie.  Dit dient overgemaakt te worden op girorekening
  1509. 53.95.461 ten name van Rob Beckers, te Bunde. Vermeld s.v.p.
  1510. "Registratie  Serv-U" zodat duidelijk  is  waarvoor  betaald
  1511. wordt. A.u.b. geen geld vanuit het buitenland overmaken! Van
  1512. die   35   piek   zou  dan  heel  weinig  overblijven.   Het
  1513. registratieformulier gewoon naar de VS sturen  (post  of  E-
  1514. mail).
  1515.  
  1516. Next, what do you get if you register? As soon as I get your
  1517. registration  I'll  send  you  a  registration   code   plus
  1518. instructions  on  how to add it to the  program.  This  will
  1519. enable you to use the program, even after the 30 day try-out
  1520. period.  Please let me know your E-mail address,  so  I  can
  1521. notify  you fast. In case I have your E-mail address  you'll
  1522. also  get  notified when there are updates. Once  registered
  1523. you'll get those updates for free. That is, you can use  the
  1524. same  registration code on the updates, but you'll  have  to
  1525. get  them yourself. Apart from all this you'll also get  the
  1526. nice,  warm  feeling of having contributed to  improving  my
  1527. financial status!
  1528.  
  1529. The  registration code is tied to the user/company name  you
  1530. specify on the registration form. You can see if your server
  1531. is  registered  by  looking  at the  'About'  dialogbox:  If
  1532. registered it will tell you to whom. Another thing  to  keep
  1533. in mind is that the registration information is sent back to
  1534. any  FTP client who uses the FTP command 'HELP'. This is not
  1535. a  much  used command but in principle it allows  the  whole
  1536. world  to  find  out who paid for your copy  of  Serv-U.  If
  1537. you're  the lawful owner of the server this shouldn't bother
  1538. you, if not...
  1539.  
  1540. The next page is the registration form. Please use this form
  1541. for all registrations! That way I can keep my administration
  1542. manageable.
  1543.  
  1544. ------------------------------------------------------------
  1545.  
  1546. ROB BECKERS
  1547. 1911 Erwin Road, Apt I
  1548. Durham, NC 27705
  1549. U.S.A.
  1550.  
  1551.                               
  1552.                               
  1553.                   REGISTRATION FORM SERV-U
  1554.                   ========================
  1555.                               
  1556.  
  1557.  
  1558.            Name: ...........................................
  1559.  
  1560.    Company Name: ...........................................
  1561.  
  1562.         Address: ...........................................
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.    Phone Number: ...........................................
  1569.  
  1570.  E-Mail Address: ...........................................
  1571.                           (Internet only please)
  1572.  
  1573. Additional comments, suggestions, complaints, praise, etc:
  1574.  
  1575. ............................................................
  1576.  
  1577. ............................................................
  1578.  
  1579. ............................................................
  1580.  
  1581.  
  1582. Registration fee is $20 per copy. Send this order form along
  1583. with  your  payment  to:  Rob Beckers, Erwin  Road  Apt.  I,
  1584. Durham NC 27705, USA.
  1585.  
  1586. If   you  have any questions, comments or suggestions please
  1587. contact  Rob Beckers at the above address or via  e-mail  to
  1588. RJB@eel-mail.mc.duke.edu. Check out the site license  prices
  1589. if you need multiple copies.
  1590.  
  1591. As  this software is shareware it comes 'as is', there is no
  1592. warranty  implied  or  otherwise, nor is  support  provided.
  1593. However, if you discover any bugs or problems please contact
  1594. the developer at the above e-mail address.
  1595.  
  1596.